package com.zhouyu.mysql.core;

import com.zhouyu.mysql.dict.DictTable;
import com.zhouyu.mysql.page.IndexPage;

import static com.zhouyu.mysql.page.IndexPage.PAGE_NEW_INFIMUM;

/**
 * 大都督周瑜（我的微信: dadudu6789）
 */
public class BtrUtil {

    /**
     * 获取B+树中的第一个叶子节点，用来进行全表扫描
     * @param dictTable 表
     * @return 第一个叶子节点
     */
    public static IndexPage getFirstLeafPage(DictTable dictTable) {

        IndexPage rootPage = PageUtil.readPage(dictTable.getSpaceId(), dictTable.getPageNo());

        if (rootPage.page_is_leaf()) {
            return rootPage;
        }

        // 根页中的第一条记录对应的pageNo就是最小的页，我们只支持两层B+树
        int currentRec = rootPage.rec_get_next_offs(PAGE_NEW_INFIMUM);
        int pageNo = RecUtil.getRecPageNo(rootPage, currentRec);

        return PageUtil.readPage(dictTable.getSpaceId(), pageNo);

    }
}
